package ar.unsam.tp.test

import ar.unsam.tp.programa.Equipo
import ar.unsam.tp.tipo.Estandar
import ar.unsam.tp.programa.Jugador
import ar.unsam.tp.programa.Partido
import ar.unsam.tp.tipo.Solidario
import junit.framework.Assert
import org.junit.Before
import org.junit.Test
import java.util.ArrayList

class TestArmarEquipo {
	var Jugador pepe = new Jugador("pepe")
	var Jugador jose = new Jugador("jose")
	var Jugador tito = new Jugador("tito")
	var Jugador carlos = new Jugador("carlos")
	var Jugador juan = new Jugador("juan")
	var Jugador alberto = new Jugador("alberto")
	var Jugador rodolfo = new Jugador("rodolfo")
	var Jugador perez = new Jugador("perez")
	var Jugador julian = new Jugador("julian")
	var Jugador alfredo = new Jugador("alfredo")
	var Jugador maxi = new Jugador("maxi")
	var Jugador cristian = new Jugador("cristian")
	var Jugador luis = new Jugador("luis")

	var Partido partido = new Partido()

	var Equipo equipo
	var Equipo equipob

	@Before
	def void init() {
		pepe.setTipoDeInscripcion(new Estandar())
		jose.setTipoDeInscripcion(new Estandar())
		tito.setTipoDeInscripcion(new Solidario())
		carlos.setTipoDeInscripcion(new Estandar())
		juan.setTipoDeInscripcion(new Estandar())
		alberto.setTipoDeInscripcion(new Solidario())
		rodolfo.setTipoDeInscripcion(new Solidario())
		perez.setTipoDeInscripcion(new Solidario())
		julian.setTipoDeInscripcion(new Estandar())
		alfredo.setTipoDeInscripcion(new Estandar())
		maxi.setTipoDeInscripcion(new Solidario())
		cristian.setTipoDeInscripcion(new Estandar())
		luis.setTipoDeInscripcion(new Estandar())

		partido.alta(pepe)
		partido.alta(jose)
		partido.alta(tito)
		partido.alta(carlos)
		partido.alta(juan)
		partido.alta(alberto)
		partido.alta(rodolfo)
		partido.alta(perez)
		partido.alta(julian)
		partido.alta(alfredo)
		partido.alta(maxi)
		partido.alta(cristian)
		partido.alta(luis)

		equipo = new Equipo(partido.jugadoresQueJueganSeguro)
		equipob = new Equipo(partido.jugadoresQueJueganSeguro)
	}

	@Test
	def void testArmaEquipo() {
		equipo.alta(pepe)
		equipo.alta(jose)
		equipo.alta(tito)
		equipo.alta(carlos)
		equipo.alta(juan)
		Assert::assertEquals(equipo.formacionInicial.size, 5)
	}

	@Test
	def void testArmaEquipoBSolidarios() {

		//Rodolfo y maxi son solidarios que quedaron afuera
		equipob.alta(rodolfo)
		equipob.alta(maxi)
		equipob.alta(cristian)
		equipob.alta(luis)
		equipob.alta(alfredo)
		Assert::assertTrue(equipob.formacionInicial.size < 5)
	}

	@Test
	def void testArmaEquipoBNormal() {

		//Equipo con jugadores disponibles
		equipob.alta(alberto)
		equipob.alta(julian)
		equipob.alta(cristian)
		equipob.alta(luis)
		equipob.alta(alfredo)
		Assert::assertEquals(equipob.formacionInicial.size, 5)
	}

	@Test
	def void testArmaAmbosEquipos() {

		//Armo ambos equipos directamente desde la lista de jugadores seguros
		var listmp = new ArrayList<Jugador>(partido.jugadoresQueJueganSeguro.subList(0, 5))
		for (Jugador jugador : listmp) {
			equipo.alta(jugador)
		}
		listmp = new ArrayList<Jugador>(partido.jugadoresQueJueganSeguro)
		for (Jugador jugador : listmp) {
			equipob.alta(jugador)
		}

		Assert::assertEquals(equipo.formacionInicial.size, 5)
		Assert::assertEquals(equipob.formacionInicial.size, 5)
	}

}
